djercic 发表于 2022-7-5 19:55:18

通过编码连接点

你好
我想知道是否有任何方法(lisp或程序)通过以下代码连接点(在块中)。例如,我有点1,2,3。。。。,每个点都有一个代码,开始代码是K01(对于点1),然后是K(对于点2),K(对于点3),K(对于点4)。。。。,闭合点代码为K02。我想通过以下规则自动连接具有相同代码(K)的点,例如K01打开多段线,K02关闭多段线,中间是K。
并将此规则应用于任何其他代码(L、M、XXX、YYY…)
上的示例。dwg和中的点。txt在附件中。
测试。dxf
测试。txt文件

marko_ribar 发表于 2022-7-5 20:06:41

是否要使用三维多段线连接它们?还是2D?

djercic 发表于 2022-7-5 20:12:03

二维多段线

djercic 发表于 2022-7-5 20:16:21

点是3d的,所以如果在3d中不容易,我就把它们展平

marko_ribar 发表于 2022-7-5 20:22:38

好的,这是3DPOLY,因为点是3D的。。。请注意,块插入点必须与所需的三维点匹配。。。
 
(defun c:connectbyattriborder ( / bn ss kod broj i bl blatt tag val att atts bll bllst bllstn p pl )
(setq bn (getstring "\nUnesite ime bloka sa podatcima koji opisuju 3D tacku (TOCKA) : "))
(prompt "\nSelektuj tacke/blokove...")
(setq ss (ssget (list '(0 . "INSERT") (cons 2 bn))))
(setq kod (getstring "\nUnesite opis atributa KOD (za XXX vrednost spajam XXX1, XXX, XXX, ..., XXX2) : "))
(setq broj (getstring "\nUnesite opis atributa BROJ (za prthodno uneti kod spajam 1,2,3,...) : "))
(repeat (setq i (sslength ss))
   (setq bl (ssname ss (setq i (1- i))))
   (setq blatt bl)
   (while (/= (cdr (assoc 0 (entget (setq blatt (entnext blatt))))) "SEQEND")
   (if (eq (cdr (assoc 0 (entget blatt))) "ATTRIB")
       (progn
         (setq tag (cdr (assoc 2 (entget blatt))))
         (setq val (cdr (assoc 1 (entget blatt))))
         (setq att (list tag val))
         (setq atts (cons att atts))
       )
   )
   )
   (setq atts (vl-sort atts '(lambda ( a b ) (> (vl-string-search kod (cadr a)) (vl-string-search kod (cadr b))))))
   (setq atts (append (list (car atts)) (vl-sort (vl-remove (car atts) atts) '(lambda ( a b ) (> (eq broj (car a)) (eq broj (car b)))))))
   (setq bll (cons bl atts))
   (setq bllst (cons bll bllst))
   (setq atts nil)
)
(foreach bl bllst
   (if (or (eq kod (cadr (cadr bl))) (eq (strcat kod "01") (cadr (cadr bl))) (eq (strcat kod "02") (cadr (cadr bl))))
   (setq bllstn (cons bl bllstn))
   )
)
(setq bllstn (vl-sort bllstn '(lambda ( a b ) (< (atoi (cadr (caddr a))) (atoi (cadr (caddr b)))))))
(foreach bl bllstn
   (setq p (cdr (assoc 10 (entget (car bl)))))
   (setq pl (cons p pl))
)
(setq pl (reverse pl))
(command "_.3DPOLY")
(foreach p pl
   (command "_non" p)
)
(command "")
(princ)
)
HTH,M.R。

marko_ribar 发表于 2022-7-5 20:30:51

djercic,代码已更新。。。
 
重新思考-如果您有“K”和“KW”KOD标记值(“K”是“KW”字符串的一部分),那么我的修订例程现在应该可以正常运行了。。。顺便说一句,“K01”和“K02”标记并不重要,只要相同的值(“K”)块具有正确的BROJ标记,具有正确的值“1”、“2”。。。

BIGAL 发表于 2022-7-5 20:32:34

Marko从事测量工作多年,我曾多次提到spagetti理论,即连接“字符串”,这是CIV3d等的日常工作。我发表评论的原因是,示例文本文件中使用的方法不是一种很好的方法,我们的测量师自80年代以来就使用了字符串,这不是什么新鲜事,基本上,用一个通用代码串相似的线,但即使使用相同的id代码(例如01EB、02EB),也会以某种方式区分项目。这将是沥青的两条道路边缘,不需要开始和结束编码,并且线在单层EB上,EB或00EB将是一个点。然后我们进入智能编码03EB*s 03EB 03EB*s,它将基于这3个点绘制一条弧,04EB*22LM这是线eb,现在在一个不同的字符串上有一个起点,在这种情况下,线标记为道路边缘。第二部分是基于点描述插入块。
 
最后,我做了几次尝试,我能想到的最接近的方法是根据代码对所有调查点进行两次排序,第一次是根据每个代码的点数进行排序,第二次是根据每个代码的点数进行排序,然后像你发布的那样做。我会找到一些样本文件。
 

djercic 发表于 2022-7-5 20:37:22

很抱歉这么晚才回复,我在现场。
Marko谢谢你的代码,但我正在寻找更自动化的东西,因为我计划测量aprox。100公里的道路和基础设施,道路附近的物体,我需要一些东西用相同的代码连接点,更像比加尔的例子。

BIGAL 发表于 2022-7-5 20:46:04

我跳过了使用CIV3D来看看这个产品“Stringer”www.civilsurveysolutions。通用域名格式。au做了很多事情,除了连接字符串。
这是一个仪器转储,如果您查看CO=这是编码308点id 00=点,30889=308点id字符串89 626190=626点id字符串190,我们的测量员走字符串,所以相同的点代码(实际上不是真正的徕卡仪器有智能,让他们做道路横截面,并保留代码,因为他们选择了一个点序列)的家伙只是从字符串01开始,并继续加1,每次他们去一个新的字符串对象,01 L,02 CL 03 R,他们有一个999的限制从来没有问题。
 

SS      ID=1039, HA=145.4458, VA=90.2351, SD=32.972, HT=1.527, CO=308000
SS      ID=1040, HA=146.3534, VA=90.1318, SD=33.725, HT=1.527, CO=310000
SS      ID=1041, HA=165.5847, VA=90.0843, SD=38.092, HT=1.527, CO=308000
SS      ID=1042, HA=178.5723, VA=90.0755, SD=37.205, HT=1.527, CO=308000
SS      ID=1043, HA=180.5404, VA=90.0002, SD=35.383, HT=1.527, CO=310000
SS      ID=1044, HA=183.1014, VA=90.2335, SD=30.423, HT=1.527, CO=PLUG000
SS      ID=1045, HA=196.5235, VA=90.1832, SD=29.785, HT=1.527, CO=310000
SS      ID=1046, HA=197.2032, VA=90.2714, SD=28.790, HT=1.527, CO=308000
SS      ID=1047, HA=202.2400, VA=90.5045, SD=21.041, HT=1.527, CO=308089
SS      ID=1048, HA=203.0942, VA=90.3956, SD=20.367, HT=1.527, CO=308089
SS      ID=1049, HA=206.2914, VA=90.3803, SD=20.928, HT=1.527, CO=308089
SS      ID=1050, HA=205.3751, VA=90.5208, SD=21.611, HT=1.527, CO=308089
SS      ID=1051, HA=181.4741, VA=90.2950, SD=14.414, HT=1.527, CO=503000
SS      ID=1052, HA=211.1759, VA=90.2506, SD=13.705, HT=1.527, CO=713000
SS      ID=1053, HA=137.1904, VA=90.1409, SD=21.707, HT=1.527, CO=NAIL000
SS      ID=1054, HA=123.3404, VA=90.0347, SD=28.530, HT=1.527, CO=626190
SS      ID=1055, HA=131.5848, VA=90.0456, SD=23.592, HT=1.527, CO=626190
SS      ID=1056, HA=136.3813, VA=90.1608, SD=21.640, HT=1.527, CO=626190
SS      ID=1057, HA=136.2451, VA=90.1456, SD=19.895, HT=1.527, CO=626190
SS      ID=1058, HA=135.4628, VA=90.0808, SD=17.944, HT=1.527, CO=626190
SS      ID=1059, HA=117.4901, VA=90.0537, SD=14.068, HT=1.527, CO=626190
SS      ID=1060, HA=88.1957, VA=90.1204, SD=12.463, HT=1.527, CO=626190
SS      ID=1061, HA=89.0946, VA=90.1521, SD=14.736, HT=1.527, CO=626190
SS      ID=1062, HA=90.0938, VA=90.1318, SD=17.603, HT=1.527, CO=626190
SS      ID=1063, HA=96.0436, VA=90.1239, SD=19.824, HT=1.527, CO=626190
SS      ID=1064, HA=91.2518, VA=90.0610, SD=20.198, HT=1.527, CO=903102
SS      ID=1065, HA=89.1502, VA=90.0558, SD=19.355, HT=1.527, CO=903102
SS      ID=1066, HA=74.4146, VA=90.0652, SD=16.340, HT=1.527, CO=903102
SS      ID=1067, HA=69.5743, VA=90.0719, SD=15.962, HT=1.527, CO=903102
SS      ID=1068, HA=61.0934, VA=90.1022, SD=15.898, HT=1.527, CO=903102
SS      ID=1069, HA=54.5358, VA=90.0828, SD=16.275, HT=1.527, CO=903102
SS      ID=1070, HA=48.2317, VA=90.0938, SD=17.127, HT=1.527, CO=903102
SS      ID=1071, HA=43.4240, VA=90.1619, SD=18.110, HT=1.527, CO=903102
SS      ID=1072, HA=39.4505, VA=90.0414, SD=19.311, HT=1.527, CO=903102
SS      ID=1073, HA=34.0308, VA=90.0803, SD=21.975, HT=1.527, CO=903102
SS      ID=1074, HA=41.2226, VA=90.0958, SD=18.644, HT=1.527, CO=626189
SS      ID=1075, HA=59.3526, VA=90.0450, SD=14.294, HT=1.527, CO=626189
SS      ID=1076, HA=63.4030, VA=90.1147, SD=14.307, HT=1.527, CO=626189
SS      ID=1077, HA=70.3118, VA=90.1645, SD=14.433, HT=1.527, CO=626189
SS      ID=1078, HA=74.4521, VA=90.1956, SD=14.732, HT=1.527, CO=626189
SS      ID=1079, HA=77.1217, VA=90.2100, SD=14.937, HT=1.527, CO=626189

BIGAL 发表于 2022-7-5 20:55:09

civ3d中的更多答案需要做一些关于外业手簿导入的家庭工作,它会做你想要的。
页: [1] 2
查看完整版本: 通过编码连接点