Netcad ile Kot Sıfırlama: Kapalı ve Açık Çoklu Doğruların Z Koordinatlarını 0’a Getirin! 🚀
Reset Elevations in Netcad: Set Z Coordinates of Closed and Open Polylines to Zero! 🚀
Bu makro, Netcad yazılımında kullanılan bir VBScript otomasyon aracıdır ve özellikle harita mühendisleri, şehir plancıları ve CAD kullanıcıları için tasarlanmıştır. 🗺️ Kapalı çoklu doğrular, açık çoklu doğrular ve tekil doğruların Z koordinat (kot) değerlerini hızlı bir şekilde 0’a getirir. Bu işlem, 3D projeleri 2D düzleme indirgemek, kot hatalarını düzeltmek veya veri standardizasyonu sağlamak için idealdir. Kullanıcı dostu bir arayüzle, hangi obje türlerinin (kapalı çoklu doğrular, açık çoklu doğrular veya doğrular) işleneceğini seçebilirsiniz. Makro, seçilen objelerin Z değerlerini sıfırlarken orijinal geometriyi korur ve işlem sonuçlarını bir mesaj kutusuyla raporlar. 🛠️
This macro is a VBScript automation tool designed for Netcad software, tailored for surveyors, urban planners, and CAD users. 🗺️ It efficiently sets the Z coordinates (elevation) of closed polylines, open polylines, and single lines to zero. Ideal for converting 3D projects to 2D, correcting elevation errors, or standardizing data, it offers a user-friendly interface to select which object types to process. The macro preserves original geometry while resetting Z values and reports results via a message box. 🛠️
Nasıl Çalışır (How Does It Work)
Makro, Netcad ortamında çalışır ve aşağıdaki adımları izler:
- Kullanıcı Seçimi: Makro, bir diyalog kutusu açar ve kullanıcıdan hangi obje türlerinin (kapalı çoklu doğrular, açık çoklu doğrular, doğrular) Z koordinatlarının sıfırlanacağını seçmesini ister. ✅
- Obje Taraması: Netcad projesindeki tüm objeleri tarar ve seçilen obje türlerine göre işlem yapar. 🔍
- Z Değerlerini Sıfırlama:
- Kapalı Çoklu Doğrular: Dış ve iç polilinelerin Z değerlerini 0’a çeker, yeni bir complex polyline oluşturur ve eski objeyi siler.
- Açık Çoklu Doğrular: Polilinenin tüm noktalarının Z değerlerini sıfırlar ve objeyi günceller.
- Doğrular: Doğrunun başlangıç ve bitiş noktalarının Z değerlerini 0’a ayarlar.
- Sonuç Raporlama: İşlem tamamlandığında, kaç tane kapalı çoklu doğru, açık çoklu doğru ve doğrunun Z koordinatının sıfırlandığını bir mesaj kutusuyla bildirir. 📊
Makro, belleği verimli kullanmak için kullanılan objeleri işlem sonunda temizler ve projenin orijinal yapısını bozmadan yalnızca Z koordinatlarını değiştirir. Hızlı, güvenilir ve kullanıcı odaklı bir çözümdür! ⚡
The macro operates within the Netcad environment and follows these steps:
User Selection: Opens a dialog box prompting the user to choose which object types (closed polylines, open polylines, lines) to reset Z coordinates for. ✅
Object Scanning: Scans all objects in the Netcad project and processes those matching the selected types. 🔍
Z Value Reset:
Closed Polylines: Resets Z values of outer and inner polylines to zero, creates a new complex polyline, and deletes the old object.
Open Polylines: Sets Z values of all polyline points to zero and updates the object.
Lines: Sets the Z values of the line’s start and end points to zero.
Result Reporting: Displays a message box summarizing how many closed polylines, open polylines, and lines had their Z coordinates reset. 📊
The macro optimizes memory by cleaning up used objects after processing and modifies only Z coordinates, preserving the project’s original structure. It’s fast, reliable, and user-focused! ⚡
Etiket ( Labels )
kot sıfırlama, Netcad makro, VBScript, CAD otomasyon, harita mühendisliği, Z koordinat sıfırlama, kapalı çoklu doğru, açık çoklu doğru, 3D to 2D, veri standardizasyonu
elevation reset, Netcad macro, VBScript, CAD automation, surveying, Z coordinate reset, closed polyline, open polyline, 3D to 2D, data standardization
📝 Netcad NVB Code
' Şaban GÜL, sabangul67@gmail.com, sabangul.com
' Yazan :
' Tarih : 21.10.2010
' Açıklama : Bu makro Netcad complex kapalı çoklu doğrularının, açık çoklu doğruların ve doğruların
' z koordinat değerlerini 0 kotuna getirir.
' Hasan Mutlu -- hasan.mutlu@netcad.com.tr
Dim isCorrectClosedPoly,isCorrectLine,isCorrectOpenPoly
Sub Main
Dim i,obj,j,pline,c,x,y,closedPolySay,dogruSay,openPolySay
Dim complexPoly,outColl,inColl,outNum,inNum,complexPoly2
Dim objCount,objNum,newObj,sonucMesaj,dogruMesaj,closedPolyMesaj,openPolyMesaj
'düzeltilen obje sayilaridir.
closedPolySay=0
dogruSay=0
'kullanici secimleridir
isCorrectClosedPoly=1
isCorrectOpenPoly=1
isCorrectLine=1
'kullanicidan hangi objelerin düzeltilecegi bilgileri alinir.
if GetDialogResult=false then
exit sub
end if
'kullanici hiçbir obje türünü duzeltmeyi seçmemiş ise işlem iptal edilir.
if isCorrectClosedPoly=0 and isCorrectLine=0 and isCorrectOpenPoly=0 then
exit sub
end if
with Netcad
set obj=.Newobject
set c=.Newc(0,0,0)
set complexPoly=.NewComplexPoly
objCount=.NumObject
for objNum=0 to objCount-1
set obj=.GetObject(objNum)
'kapalı çoklu doğrular üzerinde işlem yapılır
if obj.tag=opline then
if (obj.flags and 1)>0 and isCorrectClosedPoly=1 then
'yeni complexpoly yaratilir
set complexPoly2=.NewComplexPoly
set complexPoly=obj.GetObjectAsComplexPline()
'dış polyline ların z değerleri sıfırlanır
set outColl=complexPoly.outs
if outColl.Num>0 then
for outNum=0 to outColl.Num-1
set pline=outColl.get(outNum)
SetPlineZero pline
complexPoly2.outs.add pline
pline.destroyPoly()
set pline=nothing
next
end if
'iç polyline ların z değerleri sıfırlanır
set inColl=complexPoly.ins
if inColl.Num>0 then
for inNum=0 to inColl.Num-1
set pline=inColl.get(inNum)
for i=0 to pline.Num-1
pline.Cor(i).z=0.0
next
complexPoly2.ins.add pline
pline.destroyPoly()
set pline=nothing
next
end if
'yeni complex polyline Netcad e eklenir
set newObj=obj.GetCopy
.AddComplexPoly newObj,complexPoly2
'değişen obje sayısı için bir arttırılır
closedPolySay=closedPolySay+1
'kullanılan objeler bellekten silinir.
set complexPoly=nothing
set inColl=nothing
set outColl=nothing
set complexPoly2=nothing
set newObj=nothing
'eski obje mutlaka silinmelidir.
.delObject objNum,obj
elseif (obj.flags and 1)<1 and isCorrectOpenPoly=1 then 'açık çoklu doğruların z degerlerini sifirlar
if MakeZZeroOpenPoly(obj,objNum)=true then
openPolySay=openPolySay+1
end if
end if
elseif obj.Tag=oline and isCorrectLine=1 then
'dogrularin kotlari sifirlanir.
obj.p1.z=0
obj.p2.z=0
.PutObject objNum,obj
dogruSay=dogruSay+1
end if
set obj=nothing
next
end with
'sonuc mesajlari duzeltilir.
dogruMesaj=dogruSay & " tane doğrunun z koordinatı sıfırlanmıştır."
closedPolyMesaj=closedPolySay & " tane kapalı çoklu doğrunun z koordinatı sıfırlanmıştır."
openPolyMesaj=openPolySay & " tane açık çoklu doğrunun z koordinatı sıfırlanmıştır."
if isCorrectClosedPoly=1 then
if sonucMesaj<>"" then
sonucMesaj=sonucMesaj & closedPolyMesaj & VbCrLf
else
sonucMesaj=closedPolyMesaj & VbCrLf
end if
end if
if isCorrectOpenPoly=1 then
if sonucMesaj<>"" then
sonucMesaj=sonucMesaj & openPolyMesaj & VbCrLf
else
sonucMesaj=openPolyMesaj & VbCrLf
end if
end if
if isCorrectLine=1 then
if sonucMesaj<>"" then
sonucMesaj=sonucMesaj & dogruMesaj & VbCrLf
else
sonucMesaj=dogruMesaj & VbCrLf
end if
end if
'mesaj gosterilir.
Msgbox sonucMesaj,0,"Netcad"
End Sub
sub SetPlineZero(pline)
dim i
if not pline is nothing then
for i=0 to pline.Num-1
pline.Cor(i).z=0.0
next
end if
end sub
function GetDialogResult
Dim dlg
with Netcad
set dlg=.newbdialog("Kot Sıfırlama Makrosu")
dlg.GetCheck "cdogruChk","Kapalı çoklu doğruların kotlarını sıfırla",isCorrectClosedPoly
dlg.GetCheck "acikCDogru","Açık çoklu doğruların kotlarını sıfırla",isCorrectOpenPoly
dlg.GetCheck "dogruChk","Doğruların kotlarını sıfırla",isCorrectLine
if dlg.showmodal then
isCorrectClosedPoly=dlg.valueByName("cdogruChk")
isCorrectOpenPoly=dlg.valueByName("acikCDogru")
isCorrectLine=dlg.valueByName("dogruChk")
else
GetDialogResult=false
exit function
end if
end with
GetDialogResult=true
end function
function MakeZZeroOpenPoly(polyObj,objNum)
Dim pline,plineNew,x,y,res,i,c
set pline=polyObj.getObjectAsPline()
with Netcad
if not pline is Nothing then
set plineNew=.NewPoly
for i=0 to pline.Num-1
x=pline.Cor(i).x
y=pline.Cor(i).y
set c=.Newc(y,x,0)
c.flag=pline.Cor(i).flag
plineNew.AddCoor(c)
next
.PutPlineExt polyObj,plineNew
.PutObject objNum,polyObj
res=true
end if
end with
MakeZZeroOpenPoly=res
end function
VBnetcad-kot-sifirla
✅ Makroyu kullanmadan önce lütfen aşağıdaki uyarıları dikkatlice okuyunuz:
• Obje sayısı yüksekse işlem uzun sürebilir ve Netcad yazılımı yanıt veremez hale gelebilir.
• Bu nedenle tüm projelerinizi önceden yedeklemeniz önemle tavsiye edilir.
• Makro çalıştıktan sonra işlemi geri almak mümkün olmayabilir.
• Makrolar periyodik olarak güncellenmektedir; sayfamızı takip ederek güncel sürümleri kullanmaya özen gösteriniz.
💾 Makrolar yalnızca Netcad yazılımında çalışır ve .nps formatında sunulur. Bu format düzenlenemez; özelleştirme talepleriniz için bizimle iletişime geçebilirsiniz.
✉️ Görüş, öneri ve hata bildirimleri için: sabangul67@gmail.com
⚙️ Bu makrolar Kadastro, 2B, Orman, Kamulaştırma, Değerleme, CBS, Halihazır Harita, İmar Planı, Etüt-Proje gibi birçok alanda kullanılabilir.
🔐 Makrolar e-posta eki veya sosyal medya üzerinden paylaşılmaz. Talepte bulunmanız durumunda yalnızca e-posta adresinize bilgilendirme yapılır. Makrolar yalnızca internet sitemiz üzerinden paylaşılır.
📥 Makroları indirerek kullanım sorumluluğunu kabul etmiş sayılırsınız. Oluşabilecek tüm sorunlar kullanıcı sorumluluğundadır.